package zestaw1.enumeracje2;

import sun.security.x509.SubjectAlternativeNameExtension;

import java.util.EnumMap;

/**
 * Author: Daniel Michalski
 * Date: 13.07.13
 */

public enum Transaction {
    // Elementy wyliczenia (konkretne operacje)
    // Wiązemy z nimi ciała podkls, w których
    // implementujemy metodę perform,
    // która jest zadeklarowana na końcu jako abstrakcyjna
    // Uwaga: w klasach enum elementy wyliczenia zdaje się winny
    // poprzedzać wszelkie rozszerzenia funkcjonalności

    SUPLY {
        @Override
        public void perform(Gazety g, int n) {
            if (stanMagaz.containsKey(g))
                n += stanMagaz.get(g);
            stanMagaz.put(g, n);
        }
    },

    SALE {
        @Override
        public void perform(Gazety g, int n) {
            if (!stanMagaz.containsKey(g)) return;
            int k = stanMagaz.get(g);
            if (n > k) n = k;
            stanMagaz.put(g, k-n);
            sprzedane.put(g, n);
        }
    };


    public static EnumMap<Gazety, Integer> getStanMagaz() {
        return stanMagaz;
    }

    public static EnumMap<Gazety, Integer> getSprzedane() {
        return sprzedane;
    }

    private static final EnumMap<Gazety, Integer> stanMagaz =
            new EnumMap<Gazety, Integer>(Gazety.class);
    private static final EnumMap<Gazety, Integer> sprzedane =
            new EnumMap<Gazety, Integer>(Gazety.class);


    public abstract void perform(Gazety g, int n);
}
